package com.dncrm.util;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;

import java.util.*;

public class SortUtil {
    public static void main(String[] args) {
        System.out.println(testMapSort());
    }

    /**
     * 对list进行排序
     *
     * @param sortList  需要排序的list
     * @param param1    排序的参数名称
     * @param orderType 排序类型：正序-asc；倒序-desc
     */
    public static List sort(List sortList, String param1, String orderType) {
        Comparator mycmp1 = ComparableComparator.getInstance();
        if ("desc".equals(orderType)) {
            mycmp1 = ComparatorUtils.reversedComparator(mycmp1); //逆序（默认为正序）
        }

        ArrayList<Object> sortFields = new ArrayList<Object>();
        sortFields.add(new BeanComparator(param1, mycmp1)); //主排序（第一排序）

        ComparatorChain multiSort = new ComparatorChain(sortFields);
        Collections.sort(sortList, multiSort);

        return sortList;
    }

    /**
     * 对list进行排序
     *
     * @param sortList  需要排序的list
     * @param param1    排序的参数名称:参数长度
     * @param param2    排序的参数名称:排序参数
     * @param orderType 排序类型：正序-asc；倒序-desc
     */
    public static List sortParam2(List sortList, String param1, String param2, String orderType) {
        Comparator mycmp1 = ComparableComparator.getInstance();
        Comparator mycmp2 = ComparableComparator.getInstance();
        if ("desc".equals(orderType)) {
            mycmp1 = ComparatorUtils.reversedComparator(mycmp1); //逆序（默认为正序）
        }

        ArrayList<Object> sortFields = new ArrayList<Object>();
        sortFields.add(new BeanComparator(param1, mycmp1)); //主排序（第一排序）
        sortFields.add(new BeanComparator(param2, mycmp2)); //主排序（第一排序）

        ComparatorChain multiSort = new ComparatorChain(sortFields);
        Collections.sort(sortList, multiSort);

        return sortList;
    }

    public static List testMapSort() {
        List sortList = new ArrayList();

        Map map = new HashMap();
        map.put("name", "1");
        map.put("age", "1");

        Map map2 = new HashMap();
        map2.put("name", "2");
        map2.put("age", "13");

        Map map1 = new HashMap();
        map1.put("name", "2");
        map1.put("age", "12");

        List list = new ArrayList();
        list.add(map);
        list.add(map1);
        list.add(map2);

        //return sort(list, "age", "asc");
        return sortParam2(list, "name", "age", "asc");
    }

}
